import logging


class LoggerSingleton:
    _instance = None
    logger = None

    def __new__(cls, *args, **kwargs):
        if not cls._instance:
            cls._instance = super(LoggerSingleton, cls).__new__(cls, *args, **kwargs)
            cls._instance.configure_logging()
        return cls._instance

    def configure_logging(self):
        # 创建一个日志器
        self.logger = logging.getLogger('machine')
        # 设置日志级别为 INFO
        level = logging.INFO
        self.logger.setLevel(level)

        # 创建一个处理器，将日志输出到控制台
        console_handler = logging.StreamHandler()
        console_handler.setLevel(level)

        # 创建一个处理器，将日志输出到文件
        file_handler = logging.FileHandler(r'C:\Users\Public\ja-netfilter.log', encoding='utf-8')
        file_handler.setLevel(level)

        # 创建一个格式化器
        formatter = logging.Formatter('%(asctime)s-%(levelname)s [%(filename)s:%(lineno)d]：%(message)s')

        # 将格式化器添加到处理器
        console_handler.setFormatter(formatter)
        file_handler.setFormatter(formatter)

        # 将处理器添加到日志器
        self.logger.addHandler(console_handler)
        self.logger.addHandler(file_handler)

    def get_logger(self):
        return self.logger


# 获取单例 logger 实例
def get_logger():
    return LoggerSingleton().get_logger()


# 使用单例 logger 记录不同级别的日志
logger = get_logger()

# 示例：记录不同级别的日志
# logger.debug("这是一个调试信息")
# logger.info("这是一个信息")
# logger.warning("这是一个警告")
# logger.error("这是一个错误")
# logger.critical("这是一个严重错误")
